home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / asm-m68k / div64.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  647 b   |  29 lines

  1. #ifndef _M68K_DIV64_H
  2. #define _M68K_DIV64_H
  3.  
  4. #include <linux/types.h>
  5.  
  6. /* n = n / base; return rem; */
  7.  
  8. #define do_div(n, base) ({                    \
  9.     union {                            \
  10.         unsigned long n32[2];                \
  11.         unsigned long long n64;                \
  12.     } __n;                            \
  13.     unsigned long __rem, __upper;                \
  14.                                 \
  15.     __n.n64 = (n);                        \
  16.     if ((__upper = __n.n32[0])) {                \
  17.         asm ("divul.l %2,%1:%0"                \
  18.             : "=d" (__n.n32[0]), "=d" (__upper)    \
  19.             : "d" (base), "0" (__n.n32[0]));    \
  20.     }                            \
  21.     asm ("divu.l %2,%1:%0"                    \
  22.         : "=d" (__n.n32[1]), "=d" (__rem)        \
  23.         : "d" (base), "1" (__upper), "0" (__n.n32[1]));    \
  24.     (n) = __n.n64;                        \
  25.     __rem;                            \
  26. })
  27.  
  28. #endif /* _M68K_DIV64_H */
  29.